package main

/**
67. 二进制求和
给你两个二进制字符串，返回它们的和（用二进制表示）。
输入为 非空 字符串且只包含数字 1 和 0。

示例 1:
输入: a = "11", b = "1"
输出: "100"
示例 2:

输入: a = "1010", b = "1011"
输出: "10101"


提示：
每个字符串仅由字符 '0' 或 '1' 组成。
1 <= a.length, b.length <= 10^4
字符串如果不是 "0" ，就都不含前导零。

*/

func addBinary(a string, b string) string {
	i := len(a)
	j := len(b)
	k := j
	c, d := b, a
	if i > j {
		k = i
		c, d = a, b
	}
	var str string
	var x int
	var y int
	var z int
	for r := k - 1; r >= 0; r-- {
		if c[r] == '1' {
			x = 1
		} else {
			x = 0
		}
		der := len(c) - len(d)
		if r-der >= 0 && d[r-der] == '1' {
			y = 1
		} else {
			y = 0
		}

		s := x + y + z
		if s == 0 {
			str = "0" + str
			z = 0
		} else if s == 1 {
			str = "1" + str
			z = 0
		} else if s == 2 {
			str = "0" + str
			z = 1
		} else {
			str = "1" + str
			z = 1
		}
	}

	//fmt.Println("z",z)
	if z == 1 {
		str = "1" + str
	}

	return str
}
